package cn.itcast.web.controller.system;


import cn.itcast.domain.system.Module;
import cn.itcast.domain.system.Role;
import cn.itcast.service.system.ModuleService;
import cn.itcast.service.system.RoleService;
import cn.itcast.web.controller.BaseController;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/system/role")
public class RoleController extends BaseController{
    @Autowired
    private RoleService roleService;
    @Autowired
    private ModuleService moduleService;
    //查询角色 分页
    @RequestMapping("/list")
    public String list(@RequestParam(defaultValue = "1") int page , @RequestParam(defaultValue = "10") int size ){
        //1.调用service查询全部
        PageInfo info = roleService.findAll(page,size,getLoginCompanyId());
        //2.将对象存入域中
        model.addAttribute("page",info);
        //3.跳转页面
        return "system/role/role-list";
    }

    //跳转添加页面
    @RequestMapping("/toAdd")
    public String toAdd(){
        return "system/role/role-add";
    }

    //跳转更新页面
    @RequestMapping("/toUpdate")
    public String toUpdate(String id){
        //进行页面回显
        Role role = roleService.findById(id);
        model.addAttribute("role",role);

        return "system/role/role-update";
    }

    //添加 更新 角色整合
    @RequestMapping("/edit")
    public String edit(Role role){
        role.setCompanyId(getLoginCompanyId()); //id
        role.setCompanyName(getLoginCompanyName()); //公司名
        if (StringUtils.isEmpty(role.getId())){
            //保存
            roleService.save(role);
        }else{
            //更新
            roleService.update(role);
        }
        return "redirect:/system/role/list.do";
    }

    //删除
    @RequestMapping("/delete")
    public String delete(String id){
        roleService.delete(id);
        return "redirect:/system/role/list.do";
    }


   /*
        进入到权限分配界面
            分配权限： 对角色分配可操作菜单权限
            参数：角色id
            业务：根据id查询角色
    */
    @RequestMapping("/roleModule")
    public String roleModule(String roleid){
        Role role = roleService.findById(roleid);
        request.setAttribute("role",role);
        return "system/role/role-module";
    }

    /**
     * 接收前端页面发送的ajax请求，获取所有的模块数据
     *      返回json数据
     *          var zNodes=[
     *              {id:111,pId:11,name:"随意勾选 1-1-1"}，
     *              {id:112,pID:11,name:"随意勾选 1-1-2"}
     *          ]
     *      方法的返回值需要以 @RequestBody修饰
     *      方法的返回值 ： List<Map>
     *      参数 ： roleId
     */
    @RequestMapping("/getZtreeNodes")
    @ResponseBody
    public List<Map> getZtreeNodes(String roleId){
        List<Map> list = new ArrayList<Map>();
        //查询所有的模块
        List<Module> modules = moduleService.findAll();  //合同管理 ，用户管理 ，权限管理
        //查询当前角色的所有的模块信息
        List<Module> roleModules = moduleService.findByRoleId(roleId); //合同管理，用户管理
        //循环模块列表，构造返回数据
        for (Module module :modules){
            Map map = new HashMap();
            map.put("id",module.getId());
            map.put("pId",module.getParentId());
            map.put("name",module.getName());
            if (roleModules.contains(module)) {
                map.put("checked", true);
            }
            list.add(map);
        }
        return list;
    }

    /**
     * 分配权限
     *      参数：
     *          1.角色id
     *          2.所勾选的模块id的字符串
     *          roleid
     *          moduleIds
     */
    @RequestMapping("/updateRoleModule")
    public String updateRoleModule(String roleid,String moduleIds){
        //1.调用service
        roleService.updateRoleModule(roleid,moduleIds);
        //2.返回页面
        return "redirect:/system/role/list.do";
    }


}
